﻿using CapaNegocio;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CapaPresentacion
{
    public partial class frmPlanilla : Form
    {

        public int Idtrabajador;

        private bool IsNuevo = false;

        private bool IsEditar = false;
        public frmPlanilla()
        {
            InitializeComponent();
            this.txtidplanilla.Visible=false;
        }



        //Mostrar Mensaje de Confirmación
        private void MensajeOk(string mensaje)
        {
            MessageBox.Show(mensaje, "Sistema de Ventas", MessageBoxButtons.OK, MessageBoxIcon.Information);

        }


        //Mostrar Mensaje de Error
        private void MensajeError(string mensaje)
        {
            MessageBox.Show(mensaje, "Sistema de Ventas", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

        //Limpiar todos los controles del formulario
        private void Limpiar()
        {
            this.txtnumcarnet.Text = string.Empty;
            this.txtNombre.Text = string.Empty;
            this.txtApellido.Text = string.Empty;
            this.txtOcupacion.Text = string.Empty;
            this.txtDiasLab.Text = string.Empty;
            this.txtHorasLab.Text = string.Empty;
            this.txtHoraExt.Text = string.Empty;
            this.txtbasico.Text = "0";
            this.txtAsignacion.Text = "0";
            this.txtBodificacion.Text = "0";
            this.txtIncremento10.Text = "0";
            this.txtincremento3.Text = "0";
            this.txtincremento33.Text = "0";
            this.txtSnp.Text = "0";
            this.txtAporte.Text = "0";
            this.txtComision.Text = "0";
            this.txtInvalidez.Text = "0";
            this.txtImpuesto.Text = "0";
            this.txtAdelanto.Text = "0";
            this.txtOtro.Text = "0";
            this.txtEssalud.Text = "0";
            this.txtSenati.Text = "0";
            this.txtporciento.Text = "0";
        }

        //Habilitar los controles del formulario
        private void Habilitar(bool valor)
        {


            this.txtnumcarnet.ReadOnly = !valor;
            this.txtNombre.ReadOnly = !valor;
            this.txtApellido.ReadOnly = !valor;
            this.txtOcupacion.ReadOnly = !valor;
            this.txtDiasLab.ReadOnly = !valor;
            this.txtHorasLab.ReadOnly = !valor;
            this.txtHoraExt.ReadOnly = !valor;
            this.txtbasico.ReadOnly = !valor;
            this.txtAsignacion.ReadOnly = !valor;
            this.txtBodificacion.ReadOnly = !valor;
            this.txtIncremento10.ReadOnly = !valor;
            this.txtincremento3.ReadOnly = !valor;
            this.txtincremento33.ReadOnly = !valor;
            this.txtTotalR.Enabled = valor;
            this.txtSnp.ReadOnly = !valor;
            this.txtAporte.ReadOnly = !valor;
            this.txtComision.ReadOnly = !valor;
            this.txtInvalidez.ReadOnly = !valor;
            this.txtImpuesto.ReadOnly = !valor;
            this.txtAdelanto.ReadOnly = !valor;
            this.txtOtro.ReadOnly = !valor;
            this.txtTotaldescuento.Enabled = valor;
            this.txtnetoapagar.Enabled = valor;
            this.txtEssalud.ReadOnly = !valor;
            this.txtSenati.ReadOnly = !valor;
            this.txtporciento.ReadOnly = !valor;
            this.txtTotalAporte.Enabled = valor;

        }

        //Habilitar los botones
        private void Botones()
        {
            if (this.IsNuevo || this.IsEditar) //Alt + 124
            {
                this.Habilitar(true);
                this.btnNuevo.Enabled = false;
                this.btnGuardar.Enabled = true;
                this.btnEditar.Enabled = false;
                this.btnCancelar.Enabled = true;
            }
            else
            {
                this.Habilitar(false);
                this.btnNuevo.Enabled = true;
                this.btnGuardar.Enabled = false;
                this.btnEditar.Enabled = true;
                this.btnCancelar.Enabled = false;
            }

        }

        //Método para ocultar columnas
        private void OcultarColumnas()
        {
            this.dataListado.Columns[0].Visible = false;
            this.dataListado.Columns[1].Visible = false;
        }

        //Método Mostrar
        private void Mostrar()
        {
            this.dataListado.DataSource = NPlanilla.Mostrar();
            this.OcultarColumnas();
            lblTotal.Text = "Total de Registros: " + Convert.ToString(dataListado.Rows.Count);
        }

        //Método BuscarNombre
        private void BuscarNombre()
        {
            this.dataListado.DataSource = NPlanilla.BuscarFecha(this.txtBuscar.Text);
            this.OcultarColumnas();
            lblTotal.Text = "Total de Registros: " + Convert.ToString(dataListado.Rows.Count);
        }


        private void frmPlanilla_Load(object sender, EventArgs e)
        {

            this.Top = 0;
            this.Left = 0; 
            this.Mostrar();
            this.Habilitar(false);
            this.Botones();
        }

        private void btnNuevo_Click(object sender, EventArgs e)
        {

            this.IsNuevo = true;
            this.IsEditar = false;
            this.Botones();
            this.Limpiar();
            this.Habilitar(true);
            this.txtNombre.Focus();
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            try
            {
                string rpta = "";
                if (this.txtNombre.Text == string.Empty || this.txtApellido.Text == string.Empty || txtOcupacion.Text == string.Empty)
                {
                    MensajeError("Falta ingresar algunos datos, serán remarcados");
                    errorIcono.SetError(txtNombre, "Ingrese un Valor");
                    errorIcono.SetError(txtApellido, "Ingrese un Valor");
                    errorIcono.SetError(txtOcupacion, "Ingrese un Valor");
                }
                else
                {
                    if (this.IsNuevo)
                    {

                        rpta = NPlanilla.Insertar(
                            this.txtnumcarnet.Text,
                            this.txtNombre.Text.Trim().ToUpper(),
                            this.txtApellido.Text.Trim().ToUpper(),
                            this.txtOcupacion.Text,
                            this.txtDiasLab.Text,
                            this.txtHorasLab.Text,
                            this.txtHoraExt.Text,
                            Convert.ToDecimal(this.txtbasico.Text),
                            Convert.ToDecimal(this.txtAsignacion.Text),
                            Convert.ToDecimal(this.txtBodificacion.Text),
                            Convert.ToDecimal(this.txtIncremento10.Text),
                            Convert.ToDecimal(this.txtincremento3.Text),
                            Convert.ToDecimal(this.txtincremento33.Text),
                            Convert.ToDecimal(this.txtTotalR.Text),
                            Convert.ToDecimal(this.txtSnp.Text),
                            Convert.ToDecimal(this.txtAporte.Text),
                            Convert.ToDecimal(this.txtComision.Text),
                            Convert.ToDecimal(this.txtInvalidez.Text),
                            Convert.ToDecimal(this.txtImpuesto.Text),
                            Convert.ToDecimal(this.txtAdelanto.Text),
                            Convert.ToDecimal(this.txtOtro.Text),
                            Convert.ToDecimal(this.txtTotaldescuento.Text),
                            Convert.ToDecimal(this.txtnetoapagar.Text),
                            Convert.ToDecimal(this.txtEssalud.Text),
                            Convert.ToDecimal(this.txtSenati.Text),
                            Convert.ToDecimal(this.txtporciento.Text),
                            Convert.ToDecimal(this.txtTotalAporte.Text),
                            Idtrabajador
                            );



                    }
                    else
                    {
                        rpta = NPlanilla.Editar(
                            Convert.ToInt32(this.txtidplanilla.Text),
                            this.txtnumcarnet.Text,
                            this.txtNombre.Text.Trim().ToUpper(),
                            this.txtApellido.Text.Trim().ToUpper(),
                            this.txtOcupacion.Text,
                            this.txtDiasLab.Text,
                            this.txtHorasLab.Text,
                            this.txtHoraExt.Text,
                            Convert.ToDecimal(this.txtbasico.Text),
                            Convert.ToDecimal(this.txtAsignacion.Text),
                            Convert.ToDecimal(this.txtBodificacion.Text),
                            Convert.ToDecimal(this.txtIncremento10.Text),
                            Convert.ToDecimal(this.txtincremento3.Text),
                            Convert.ToDecimal(this.txtincremento33.Text),
                            Convert.ToDecimal(this.txtTotalR.Text),
                            Convert.ToDecimal(this.txtSnp.Text),
                            Convert.ToDecimal(this.txtAporte.Text),
                            Convert.ToDecimal(this.txtComision.Text),
                            Convert.ToDecimal(this.txtInvalidez.Text),
                            Convert.ToDecimal(this.txtImpuesto.Text),
                            Convert.ToDecimal(this.txtAdelanto.Text),
                            Convert.ToDecimal(this.txtOtro.Text),
                            Convert.ToDecimal(this.txtTotaldescuento.Text),
                            Convert.ToDecimal(this.txtnetoapagar.Text),
                            Convert.ToDecimal(this.txtEssalud.Text),
                            Convert.ToDecimal(this.txtSenati.Text),
                            Convert.ToDecimal(this.txtporciento.Text),
                            Convert.ToDecimal(this.txtTotalAporte.Text),
                            Idtrabajador
                            );

                    }

                    if (rpta.Equals("OK"))
                    {
                        if (this.IsNuevo)
                        {
                            this.MensajeOk("Se Insertó de forma correcta el registro");
                        }
                        else
                        {
                            this.MensajeOk("Se Actualizó de forma correcta el registro");
                        }
                    }
                    else
                    {
                        this.MensajeError(rpta);
                    }

                    this.IsNuevo = false;
                    this.IsEditar = false;
                    this.Botones();
                    this.Limpiar();
                    this.Mostrar();


                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + ex.StackTrace);
            }
        }

        private void btnEditar_Click(object sender, EventArgs e)
        {

            if (!this.txtidplanilla.Text.Equals(""))
            {
                this.IsEditar = true;
                this.Botones();
                this.Habilitar(true);
            }
            else
            {
                this.MensajeError("Debe de seleccionar primero el registro a Modificar");
            }
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {

            this.IsNuevo = false;
            this.IsEditar = false;
            this.Botones();
            this.Limpiar();
            this.Habilitar(false);
            this.txtbasico.Text = string.Empty;
            this.txtAsignacion.Text = string.Empty;
            this.txtBodificacion.Text = string.Empty;
            this.txtIncremento10.Text = string.Empty;
            this.txtincremento3.Text = string.Empty;
            this.txtincremento33.Text = string.Empty;
            this.txtSnp.Text = string.Empty;
            this.txtAporte.Text = string.Empty;
            this.txtComision.Text = string.Empty;
            this.txtInvalidez.Text = string.Empty;
            this.txtImpuesto.Text = string.Empty;
            this.txtAdelanto.Text = string.Empty;
            this.txtOtro.Text = string.Empty;
            this.txtEssalud.Text = string.Empty;
            this.txtSenati.Text = string.Empty;
            this.txtporciento.Text = string.Empty;
            this.txtTotalR.Text = "Remuneracion Total";
            this.txtTotalAporte.Text = "Aporte Total";
            this.txtTotaldescuento.Text = "Descuento Total";
            this.txtnetoapagar.Text = "Neto a Pagar";
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            this.BuscarNombre();
        }

        private void txtBuscar_TextChanged(object sender, EventArgs e)
        {
            this.BuscarNombre();
        }

        private void dataListado_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

            if (e.ColumnIndex == dataListado.Columns["Eliminar"].Index)
            {
                DataGridViewCheckBoxCell ChkEliminar = (DataGridViewCheckBoxCell)dataListado.Rows[e.RowIndex].Cells["Eliminar"];
                ChkEliminar.Value = !Convert.ToBoolean(ChkEliminar.Value);
            }
        }

        private void dataListado_DoubleClick(object sender, EventArgs e)
        {
            this.txtidplanilla.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["idplanilla"].Value);
            this.txtnumcarnet.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["num_documento"].Value);
            this.txtNombre.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["nombre"].Value);
            this.txtApellido.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["apellido"].Value);
            this.txtOcupacion.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["ocupacion"].Value);
            this.txtDiasLab.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["diasLab"].Value);
            this.txtHorasLab.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["horaslab"].Value);
            this.txtHoraExt.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["horasextr"].Value);
            this.txtbasico.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["basico"].Value);
            this.txtAsignacion.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["asignacion"].Value);
            this.txtBodificacion.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["bonificacion"].Value);
            this.txtIncremento10.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["incremntodies"].Value);
            this.txtincremento3.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["incrementotres"].Value);
            this.txtincremento33.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["incrementotrestres"].Value);
            this.txtTotalR.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["remuneraciontotal"].Value);
            this.txtSnp.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["dsnp"].Value);
            this.txtAporte.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["daporte"].Value);
            this.txtComision.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["dcomision"].Value);
            this.txtInvalidez.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["dinvalides"].Value);
            this.txtImpuesto.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["dimpuesto"].Value);
            this.txtAdelanto.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["dadelanto"].Value);
            this.txtOtro.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["dotro"].Value);
            this.txtTotaldescuento.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["descuentototal"].Value);
            this.txtnetoapagar.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["dpagoNeto"].Value);
            this.txtEssalud.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["ae_essalud"].Value);
            this.txtSenati.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["ae_senati"].Value);
            this.txtporciento.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["ae_porciento"].Value);
            this.txtTotalAporte.Text = Convert.ToString(this.dataListado.CurrentRow.Cells["aportetotal"].Value);            
            this.tabControl1.SelectedIndex = 1;
        }

        private void txtnetoapagar_Click(object sender, EventArgs e)
        {
            decimal subTotal = Convert.ToDecimal(this.txtTotalR.Text) - (Convert.ToDecimal(this.txtTotaldescuento.Text));
            this.txtnetoapagar.Text = subTotal.ToString("#0.00#");
        }




        private void chkEliminar_CheckedChanged(object sender, EventArgs e)
        {
            if (chkEliminar.Checked)
            {
                this.dataListado.Columns[0].Visible = true;
            }
            else
            {
                this.dataListado.Columns[0].Visible = false;
            }
        }

        private void btnEliminar_Click(object sender, EventArgs e)
        {
            try
            {
                DialogResult Opcion;
                Opcion = MessageBox.Show("Realmente Desea Anular los Registros", "Sistema de Ventas", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);

                if (Opcion == DialogResult.OK)
                {
                    string CodigoN;
                    string Rpta = "";

                    foreach (DataGridViewRow row in dataListado.Rows)
                    {
                        if (Convert.ToBoolean(row.Cells[0].Value))
                        {
                            CodigoN = Convert.ToString(row.Cells[1].Value);
                            Rpta = NPlanilla.Eliminar(Convert.ToInt32(CodigoN));

                            if (Rpta.Equals("OK"))
                            {
                                this.MensajeOk("Se Anulo Correctamente el registro");
                            }
                            else
                            {
                                this.MensajeError(Rpta);
                            }

                        }
                    }
                    this.Mostrar();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + ex.StackTrace);
            }
        }

        private void txtTotalR_Click(object sender, EventArgs e)
        {

            decimal basico = Convert.ToDecimal(this.txtbasico.Text) + Convert.ToDecimal(this.txtAsignacion.Text) +
                             Convert.ToDecimal(this.txtBodificacion.Text) + Convert.ToDecimal(this.txtIncremento10.Text) +
                             Convert.ToDecimal(this.txtincremento3.Text) + Convert.ToDecimal(this.txtincremento33.Text);
            this.txtTotalR.Text = basico.ToString("#0.00#");
        }

        private void txtTotaldescuento_Click(object sender, EventArgs e)
        {

            decimal basico1 = Convert.ToDecimal(this.txtSnp.Text) + Convert.ToDecimal(this.txtAporte.Text) +
                             Convert.ToDecimal(this.txtComision.Text) + Convert.ToDecimal(this.txtInvalidez.Text) +
                             Convert.ToDecimal(this.txtImpuesto.Text) + Convert.ToDecimal(this.txtAdelanto.Text) +
                             Convert.ToDecimal(this.txtOtro.Text);
            this.txtTotaldescuento.Text = basico1.ToString("#0.00#");
        }

        private void txtTotalAporte_Click(object sender, EventArgs e)
        {

            decimal basico2 = Convert.ToDecimal(this.txtEssalud.Text) +
                             Convert.ToDecimal(this.txtSenati.Text) +
                             Convert.ToDecimal(this.txtporciento.Text);
            this.txtTotalAporte.Text = basico2.ToString("#0.00#");
        }
        private void textBox1_Enter(object sender, System.EventArgs e)
        {
            if (!String.IsNullOrEmpty(txtbasico.Text))
            {
                txtbasico.SelectionStart = 0;
                txtbasico.SelectionLength = txtbasico.Text.Length;
            }
        }
        //no se acepta valores null

        private void textBox1_Click(object sender, System.EventArgs e)
        {
            if (!String.IsNullOrEmpty(txtbasico.Text))
            {
                txtbasico.SelectionStart = 0;
                txtbasico.SelectionLength = txtbasico.Text.Length;
            }
        }

        private void txtbasico_TextChanged(object sender, EventArgs e)
        {
            if (txtbasico.Text == string.Empty)
            {
                this.txtbasico.Text = "0";
            }
        }

        private void txtbasico_Click(object sender, EventArgs e)
        {
            if (!String.IsNullOrEmpty(txtbasico.Text))
            {
                txtbasico.SelectionStart = 0;
                txtbasico.SelectionLength = txtbasico.Text.Length;
            }
        }

        private void txtAsignacion_TextChanged(object sender, EventArgs e)
        {
            if (txtAsignacion.Text == string.Empty)
            {
                this.txtAsignacion.Text = "0";
            }
        }

        private void txtBodificacion_TextChanged(object sender, EventArgs e)
        {
            if (txtBodificacion.Text == string.Empty)
            {
                this.txtBodificacion.Text = "0";
            }
        }

        private void txtIncremento10_TextChanged(object sender, EventArgs e)
        {
            if (txtIncremento10.Text == string.Empty)
            {
                this.txtIncremento10.Text = "0";
            }
        }

        private void txtincremento3_TextChanged(object sender, EventArgs e)
        {
            if (txtincremento3.Text == string.Empty)
            {
                this.txtincremento3.Text = "0";
            }
        }

        private void txtincremento33_TextChanged(object sender, EventArgs e)
        {
            if (txtincremento33.Text == string.Empty)
            {
                this.txtincremento33.Text = "0";
            }
        }

        private void txtOtro_TextChanged(object sender, EventArgs e)
        {
            if (txtOtro.Text == string.Empty)
            {
                this.txtOtro.Text = "0";
            }
        }

        private void txtAdelanto_TextChanged(object sender, EventArgs e)
        {
            if (txtAdelanto.Text == string.Empty)
            {
                this.txtAdelanto.Text = "0";
            }
        }

        private void txtImpuesto_TextChanged(object sender, EventArgs e)
        {
            if (txtImpuesto.Text == string.Empty)
            {
                this.txtImpuesto.Text = "0";
            }
        }

        private void txtInvalidez_TextChanged(object sender, EventArgs e)
        {
            if (txtInvalidez.Text == string.Empty)
            {
                this.txtInvalidez.Text = "0";
            }
        }

        private void txtComision_TextChanged(object sender, EventArgs e)
        {
            if (txtComision.Text == string.Empty)
            {
                this.txtComision.Text = "0";
            }
        }

        private void txtAporte_TextChanged(object sender, EventArgs e)
        {
            if (txtAporte.Text == string.Empty)
            {
                this.txtAporte.Text = "0";
            }
        }

        private void txtSnp_TextChanged(object sender, EventArgs e)
        {
            if (txtSnp.Text == string.Empty)
            {
                this.txtSnp.Text = "0";
            }
        }

        private void txtporciento_TextChanged(object sender, EventArgs e)
        {
            if (txtporciento.Text == string.Empty)
            {
                this.txtporciento.Text = "0";
            }
        }

        private void txtSenati_TextChanged(object sender, EventArgs e)
        {
            if (txtSenati.Text == string.Empty)
            {
                this.txtSenati.Text = "0";
            }
        }

        private void txtEssalud_TextChanged(object sender, EventArgs e)
        {
            if (txtEssalud.Text == string.Empty)
            {
                this.txtEssalud.Text = "0";
            }
        }

        private void txtbasico_KeyPress(object sender, KeyPressEventArgs e)
        {
            try
            {
                if (Char.IsNumber(e.KeyChar))
                {
                    e.Handled = false;
                }
                else if (Char.IsControl(e.KeyChar))
                {
                    e.Handled = false;
                }
                else
                {
                    e.Handled = true;
                }
            }
            catch (Exception ex)
            {

            }
        }

    }
}
